home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib07.dsk / VARIABLE CROSS REF.bas < prev   
BASIC Source File  |  2023-02-26  |  5KB  |  120 lines

  1. 2  REM  **************************
  2. 3  REM  *  VARIABLE CROSS REF    *
  3. 4  REM  *   BY DOUG SPRINKLE     *
  4. 5  REM  *  COPYRIGHT (C) 1982    *
  5. 6  REM  *  BY MICRO-SPARC, INC   *
  6. 7  REM  *  LINCOLN, MA. 01773    *
  7. 8  REM  **************************
  8. 10  POKE 33,40: GOTO 42
  9. 12  FOR SN = N0% TO L
  10. 14 MX = SN:T$ = V$(SN)
  11. 16  FOR SF = SN TO L
  12. 18  IF V$(SF) > = T$  THEN  NEXT SF: GOTO 24
  13. 20 T$ = V$(SF):MX = SF
  14. 22  NEXT SF
  15. 24  IF MX = SN  THEN  NEXT SN: GOTO 160
  16. 26  REM    SWAP FIELDS
  17. 28 T$ = V$(SN):V$(SN) = V$(MX):V$(MX) = T$:T = LN(SN):LN(SN) = LN(MX):LN(MX) = T: NEXT SN
  18. 30  REM    SORT COMPLETE
  19. 32  GOTO 162
  20. 34  FOR JK = N0% TO CL: REM      VARIABLE AREADY FOUND IN THIS LINE?
  21. 36  IF T$ = F$(JK)  THEN 124
  22. 38  NEXT JK
  23. 40  GOTO 120
  24. 42 B3$ = "   ":LP$ = "(":TH% = 256:T7% = 37:T6% = 36:S4% = 64:F7% = 47:F8% = 58:T4% = 34:N1% = 1:N0% = 0:S5% = 65:N9% = 91:P5 = .5:N2% = 2:N3% = 3:N4% = 4:CL = 1
  25. 44 BL$ = " ":N6% = 6:NT% = 10:NN% = 91:Y$ = "Y":N$ = "N":HH% = 178:FT% = 40
  26. 46  DIM V$(2000),F$(40),LN(2000)
  27. 48 AD = 2049: REM BEGINNING ADDRESS
  28. 50  HOME : VTAB 10: HTAB 13: PRINT "NOW PROCESSING": VTAB 12: HTAB 15: PRINT "LINE ";
  29. 52 NA =  PEEK(AD) +TH% * PEEK(AD +N1%): REM     NEXT ADDRESS
  30. 54  IF NA <P5  THEN 146
  31. 56 LN =  PEEK(AD +N2%) +TH% * PEEK(AD +N3%) -TH%: REM     CURRENT LINE NUMBER
  32. 57  IF LN <0  THEN AD = NA: GOTO 52
  33. 58  HTAB 20: PRINT LN;
  34. 60 K = AD +N4%:K1 = AD +TH%
  35. 62  FOR J = K TO K1
  36. 64 CH =  PEEK(J)
  37. 66  IF CH = N0%  THEN 128: REM    END OF LINE
  38. 68  IF CH >S4%  AND CH <N9%  THEN 92: REM        VARIABLE NAME FOUND
  39. 70  IF CH < >T4%  THEN 80: REM      34="
  40. 72  REM   QUOTATION MARK FOUND
  41. 74 J = J +N1%:CH =  PEEK(J)
  42. 75  IF CH = N0%  THEN 128: REM  END OF LINE
  43. 76  IF CH < >T4%  THEN 74
  44. 78  NEXT J
  45. 80  IF CH < >HH%  AND CH < >131  THEN 90
  46. 82  REM  REM TOKEN OR DATA TOKEN FOUND
  47. 84 J = J +N1%:CH =  PEEK(J)
  48. 86  IF CH = N0%  THEN 128: REM    END OF LINE
  49. 88  IF CH < >F8%  THEN 84: REM    COLON?
  50. 90  NEXT J
  51. 92  REM  
  52. 94  REM    THIS ROUTINE DETERMINES
  53. 96  REM    ALL CHARACTERS IN THE 
  54. 98  REM    VARIABLE NAME (INCLUDING %,$ AND "(" )
  55. 100  REM     AND SAVES VAR NAME IN V$()
  56. 102  REM     AND LINE# IN LN()
  57. 104  REM  
  58. 106 T$ =  CHR$(CH)
  59. 108 J = J +N1%:CH =  PEEK(J)
  60. 110  IF (CH >S4%  AND CH <NN%)  OR (CH >F7%  AND CH <F8%)  THEN T$ = T$ + CHR$(CH): GOTO 108: REM         ALPHA-NUMERIC CHARACTER FOUND
  61. 112  IF CH = T7%  OR CH = T6%  THEN T$ = T$ + CHR$(CH):J = J +N1%:CH =  PEEK(J)
  62. 114  IF CH = FT%  THEN T$ = T$ +LP$: GOTO 34
  63. 116  REM   VARIABLE COMPLETED
  64. 118  GOTO 34
  65. 120 F$(CL) = T$:CL = CL +N1%
  66. 122 V$(L) = T$:LN(L) = LN:L = L +N1%: REM    SAVE VARIABLE AND LINE NO.
  67. 124  IF CH = N0%  THEN 128
  68. 126  GOTO 64: REM NEXT CHAR              
  69. 128  REM  
  70. 130  REM    END OF LINE FOUND
  71. 132  REM  
  72. 134  REM   THIS ROUTINE PROCESSES THE NEXT LINE
  73. 136  REM  
  74. 138 CL = N0%: REM     RESET CL (MULTIPLE ENTRIES OF SAME VARIABLE ON SAME LINE)
  75. 140  FOR JK = N0% TO NT%:F$(JK) = "": NEXT JK
  76. 142 AD = NA: REM   BEGINNING OF LINE
  77. 144  GOTO 52
  78. 146  REM 
  79. 148  REM   END OF USER PROGRAM
  80. 150  REM   
  81. 152  REM   NOW SORT ARRAY V$
  82. 154  REM  
  83. 156  HOME : FLASH : VTAB 12: HTAB 18: PRINT "SORTING": NORMAL 
  84. 158  GOTO 12
  85. 160  REM  
  86. 162  REM   NOW PRINT RESULTS
  87. 164  REM  
  88. 166  HOME : VTAB 10: HTAB 12: PRINT "PRINT RESULTS (Y/N)  ";: GET A$: IF A$ < >Y$  AND A$ < >N$  THEN 166
  89. 168  IF A$ = N$  THEN  GOTO 174
  90. 170  VTAB 12: HTAB 12: PRINT "ENTER PRINTER SLOT NO. ";: GET SN$: IF  VAL(SN$) >0  THEN  VTAB 14: HTAB 12: INPUT "ENTER PRINTER SETUP STRING ";A$:SN% =  VAL(SN$): PR# SN%: PRINT A$: GOTO 174
  91. 172  PRINT  CHR$(7): GOTO 170
  92. 174  HOME 
  93. 176  FOR I = N1% TO L
  94. 178  PRINT V$(I);BL$; TAB( N6%)LN(I);B3$;
  95. 180  IF V$(I) < >V$(I +N1%)  THEN 187
  96. 182  IF  PEEK(T6%) >T4%  THEN  PRINT : HTAB N6%
  97. 184  PRINT LN(I +N1%);B3$;:I = I +N1%
  98. 186  GOTO 180
  99. 187  PRINT :KB =  PEEK( -16384): POKE  -16368,0: IF KB >127  THEN  INPUT A$
  100. 188  NEXT I
  101. 190  PR# 0
  102. 192  PRINT : PRINT "SEE IT AGAIN? (Y/N)? ";: GET A$: IF A$ = Y$  THEN  GOTO 164
  103. 194  END 
  104. 40000 D$ =  CHR$(4): PRINT D$;"OPEN XREF": PRINT D$"CLOSE": PRINT D$;"DELETE XREF": PRINT D$;"OPEN XREF": PRINT D$;"WRITE XREF"
  105. 40010  POKE 33,30
  106. 40020  LIST 62000,62070
  107. 40030  PRINT "RUN62000"
  108. 40040  LIST 1,255
  109. 40045  PRINT "DEL62000,62070"
  110. 40050  PRINT "RUN"
  111. 40060  PRINT D$;"CLOSE XREF"
  112. 40070  TEXT : END 
  113. 62000 N1% = 1:TH% = 256:N2% = 2:N3% = 3:EL = 61500
  114. 62010 AD = 8 *TH% +N1%: REM BEGINNING ADDRESS
  115. 62020  FOR I = 0 TO 59999
  116. 62030 NA =  PEEK(AD) +TH% * PEEK(AD +N1%): REM  NEXT ADDRESS
  117. 62040 X% =  PEEK(AD +N3%) +N1%: POKE (AD +N3%),X%
  118. 62050 LN = TH% * PEEK(NA +N3%) + PEEK(NA +N2%): IF LN >EL  THEN 62070
  119. 62060 AD = NA: NEXT I
  120. 62070  END